#ifndef BAG
#define BAG

#include <iostream>
#include <vector>
#include <string>
#include "Item.h"

class Player;
class Item;
class Equipment;

using namespace std;

class BackPack {
public:
    BackPack() {
        currentNum = 0;
        maxCapacity = 0;
    }
    //获取现在背包装备的数目
    int getCurrentCount()const;
    //获取背包可容纳的最大数目
    int getMaxCapacity()const;
    //构造函数，输入背包最大数目
    BackPack(int maxCapacity);
    //通过玩家类展示背包中的物品，同时可以在背包使用物品
    void showBag(Player& player);
    //判断背包是不是满的
    bool isEmpty()const;
    //判断背包是否为空的
    bool isFull()const;
    //通过物品的指针将物品加入背包
    bool addItem(Item* item);
    //通过物品指针将物品从背包中移除
    void removeItem(Item* item);
    //通过索引将背包中的物品移除
    void removeItemByIndex(int index);
    //保留非const版本，通过索引从背包中获取物品指针
    Item* getItemByIndex(int index) {
        if (index >= 0 && index < ItemList.size()) {
            return ItemList[index];
        }
        return nullptr;
    }

    //通过索引使用背包中相同索引指向的物品
    void useItemByIndex(int index, Player& player);
    //清空背包（删除所有东西）
    void clearBackPack();
    //通过装备指针与玩家指针将装备装备到玩家身上
    void equipItem(Equipment* equip, BackPack& backpack);
    void showInfo();
    // 新增：const版本的 getItemByIndex
    const Item* getItemByIndex(int index) const {
        if (index >= 0 && index < ItemList.size()) {
            return ItemList[index];
        }
        return nullptr;
    }

    // 新增：展示物品列表（无交互功能）
    void displayItems() const;

private:
    std::vector<Item*> ItemList;  // 背包物品容器
    int maxCapacity;              // 背包最大储存数量
    int currentNum;               // 当前背包物品总数
};

#endif
